home *** CD-ROM | disk | FTP | other *** search
/ Scene 96 / Scene 96 International Edition (Zyklop Software) (Disc 2) (1997).iso / misc / coding / xmasspak / bin2db / bin2db.asm < prev    next >
Encoding:
Assembly Source File  |  1996-12-14  |  16.1 KB  |  532 lines

  1. ;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  2. ;
  3. ; ESCAPE's  Binary to ASM-DB Converter V2.4
  4. ;
  5. ; Done by Capella/Escape using DOS32 version3.3
  6. ;
  7. ;
  8. ;                                                               escape'96
  9. ;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  10.  
  11.  
  12. ideal
  13. p386
  14. model flat
  15. stack 256
  16.  
  17.  
  18. ;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  19. ;                        ......CODESEGMENT......
  20. ;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  21.  
  22. codeseg
  23.  
  24. start:
  25.  
  26.                 mov ax,0ee00h
  27.                 int 31h
  28.  
  29.                 mov fs,bx
  30.  
  31.                 mov ax,_data
  32.                 mov ds,ax
  33.  
  34.                 mov ah,09h
  35.                 mov edx,offset start_mess
  36.                 int 21h
  37.  
  38.                 mov ax,0ee02h
  39.                 int 31h
  40.  
  41.                 mov [ds:PSP],esi
  42.                 mov [ds:Enviroment],edi
  43.  
  44.                 mov esi,[ds:PSP]
  45.                 add esi,128
  46.                                         
  47.                 xor ecx,ecx              ; Länge der Befehlszeile holen
  48.                 mov cl,[ds:esi]
  49.                 cmp ecx,0
  50.                 je error_3
  51.                 cmp ecx,127
  52.                 ja error_3
  53.  
  54.                 inc esi
  55.  
  56.                 mov edi,offset para_line ; Befehlszeile kopieren
  57. para_get:
  58.                 mov al,[ds:esi]
  59.                 mov [ds:edi],al
  60.  
  61.                 inc esi
  62.                 inc edi
  63.                 dec ecx
  64.                 jnz para_get
  65.  
  66.                 mov esi,offset para_line ; 1. filenamen holen
  67.                 inc esi
  68.                 mov edi,offset file_1
  69. _file_1_get:
  70.                 mov al,[ds:esi]
  71.                 cmp al,32
  72.                 je _file_1_end
  73.  
  74.                 mov [ds:edi],al
  75.                 inc esi
  76.                 inc edi
  77.                 jmp _file_1_get
  78. _file_1_end:
  79.                 inc esi                  ; 2. filenamen holen
  80.                 mov edi,offset file_2
  81. _file_2_get:
  82.                 mov al,[ds:esi]
  83.                 cmp al,32
  84.                 je _file_2_end
  85.                 cmp al,0
  86.                 je _file_2_end
  87.                 cmp al,0dh
  88.                 je _file_2_end
  89.  
  90.                 mov [ds:edi],al
  91.                 inc esi
  92.                 inc edi
  93.                 jmp _file_2_get
  94. _file_2_end:
  95.                 inc esi                  ; label holen
  96.                 mov edi,offset file_label
  97.                 mov ecx,20
  98. _label_get:
  99.                 mov al,[ds:esi]
  100.                 cmp al,32
  101.                 je _label_end
  102.                 cmp al,0
  103.                 je _label_end
  104.                 cmp al,0dh
  105.                 je _label_end
  106.  
  107.                 mov [ds:edi],al
  108.                 inc esi
  109.                 inc edi
  110.                 dec ecx
  111.                 jmp _label_get
  112. _label_end:
  113.                 or ecx,ecx
  114.                 jz _label_end2
  115. _label_end3:
  116.                 mov [byte ds:edi],32
  117.                 inc edi
  118.                 dec ecx
  119.                 jnz _label_end3
  120. _label_end2:
  121.                 mov ax,3d02h            ; file zum lesen öffnen
  122.                 mov edx,offset file_1
  123.                 int 21h
  124.                 jc error_1              ; wenn fehler dann nach error1
  125.  
  126.                 mov [ds:handel_1],eax   ; handel sichern...
  127.  
  128.                 mov ax,3c00h            ; file zum schreiben öffnen
  129.                 xor ecx,ecx
  130.                 mov edx,offset file_2
  131.                 int 21h
  132.                 jc error_2              ; wenn fehler, dann nach error2
  133.  
  134.                 mov [ds:handel_2],eax   ; handel sichern......
  135.  
  136.                 call set_label
  137.  
  138.                 mov ah,09h
  139.                 mov edx,offset conv_mess
  140.                 int 21h
  141.  
  142.                 mov dx,03d4h
  143.                 mov al,0ah
  144.                 out dx,al
  145.                 inc dx
  146.                 in al,dx
  147.                 mov [ds:cursor_height],al
  148.                 mov al,32
  149.                 out dx,al
  150.  
  151.                 call do_converting
  152.  
  153.                 mov dx,03d4h
  154.                 mov al,0ah
  155.                 out dx,al
  156.                 inc dx
  157.                 mov al,[ds:cursor_height]
  158.                 out dx,al
  159.  
  160.                 mov ah,09
  161.                 mov edx,offset dummy
  162.                 int 21h
  163.  
  164.                 mov ax,4000h
  165.                 mov ecx,1
  166.                 mov ebx,[ds:handel_2]
  167.                 mov edx,offset eof_mark
  168.                 int 21h
  169.  
  170.                 mov ax,3e00h
  171.                 mov ebx,[ds:handel_1]
  172.                 int 21h
  173.  
  174.                 mov ax,3e00h
  175.                 mov ebx,[ds:handel_2]
  176.                 int 21h
  177.  
  178. end_it:
  179.                 mov ax,4c00h
  180.                 int 21h
  181.  
  182. error_1:
  183.                 mov edx,offset e1_txt_1
  184.                 cmp ax,2
  185.                 je _print_error
  186.                 mov edx,offset e1_txt_2
  187.                 cmp ax,4
  188.                 je _print_error
  189.                 mov edx,offset e1_txt_3
  190.                 cmp ax,5
  191.                 je _print_error
  192.                 cmp ax,12
  193.                 je _print_error 
  194.  
  195.                 mov edx,offset e1_txt_0
  196. _print_error:
  197.                 mov ah,09h
  198.                 int 21h
  199.  
  200.                 jmp end_it
  201. error_2:
  202.                 mov edx,offset e2_txt_1
  203.                 cmp ax,4
  204.                 je _print_error
  205.                 mov edx,offset e2_txt_2
  206.                 cmp ax,5
  207.                 je _print_error
  208.                 mov edx,offset e2_txt_0
  209.                 jmp _print_error
  210.  
  211. error_3:
  212.                 mov ah,09h
  213.                 mov edx,offset e3_txt
  214.                 int 21h
  215.  
  216.                 jmp end_it
  217.  
  218. ;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  219. ; SET_LABEL = sets the choosen label
  220. ;             at the beginning of file
  221. ;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  222. set_label:
  223.                 mov esi,offset file_label
  224.                 xor ecx,ecx
  225. set_label_1:
  226.                 mov al,[ds:esi]
  227.                 cmp al,32
  228.                 je label_end
  229.  
  230.                 inc esi
  231.                 inc ecx
  232.                 jmp set_label_1
  233. label_end:                          ; ECX = länge des labels
  234.  
  235.                 inc ecx
  236.  
  237.                 mov ax,4000h              ; write label into file
  238.                 mov edx,offset file_label
  239.                 mov ebx,[ds:handel_2]
  240.                 int 21h
  241.  
  242.                 ret
  243.  
  244. ;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  245. ; DO_CONVERTING = converts the data and save it 
  246. ;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  247. do_converting:
  248.                 mov ax,3f00h                    ; lese daten aus dem source-
  249.                 mov edx,offset load_buffer      ; file
  250.                 mov ecx,64000
  251.                 mov ebx,[ds:handel_1]
  252.                 int 21h
  253.                 cmp eax,0
  254.                 je end_converting
  255.                 cmp eax,64000                   ; 64000 bytes gelesen ????
  256.                 jb convert_last_bytes           ; nein, dann zur anderen
  257.                                                 ; converting-routine
  258.  
  259.                 mov ecx,6400                    ; ansonsten 64000 bytes kon-
  260.                 mov esi,offset load_buffer      ; vertieren....
  261.                 mov edi,offset write_buffer
  262. _do_y_line:
  263.                 push ecx
  264.  
  265.                 mov [byte ds:edi],"d"
  266.                 mov [byte ds:edi+1],"b"
  267.                 mov [byte ds:edi+2],32
  268.  
  269.                 add edi,3
  270.  
  271.                 mov ecx,10                      ; 10 bytes pro zeile
  272. _do_x_line:
  273.                 xor ebx,ebx                     ; byte holen
  274.                 mov bl,[ds:esi]
  275.  
  276.                 inc [dword ds:byte_counter]
  277.  
  278.                 mov eax,ebx                     ; EBX * 3
  279.                 add ebx,ebx
  280.                 add ebx,eax
  281.  
  282.                 mov al,[ds:_db_values+ebx]      ; DB-values holen und 
  283.                 mov [ds:edi],al                 ; schreiben
  284.                 mov al,[ds:_db_values+ebx+1]
  285.                 mov [ds:edi+1],al
  286.                 mov al,[ds:_db_values+ebx+2]
  287.                 mov [ds:edi+2],al
  288.  
  289.                 inc esi                         ; nächstes byte
  290.                 add edi,3                       ; nächstes _db_value
  291.  
  292.                 dec ecx                         ; schon zeile zu ende ???
  293.                 jz end_of_line                  ; ja, dann carriage-return und
  294.                                                 ; linefeed setzen
  295.                 
  296.                 mov al,[ds:_db_komma]           ; ansonsten komma zur trennung
  297.                 mov [ds:edi],al                 ; setzen
  298.                 inc edi
  299.  
  300.                 jmp _do_x_line
  301. end_of_line:            
  302.                 mov ax,0a0dh
  303.                 mov [ds:edi],ax
  304.                 add edi,2
  305.  
  306.                 mov eax,[ds:byte_counter]
  307.                 call _calc_dezi
  308.  
  309.                 pop ecx
  310.  
  311.                 dec ecx                         ; gesamten load_buffer schon
  312.                 jnz _do_y_line                  ; konvertiert ???
  313.                                                 ; nein, dann weiter.....
  314.  
  315.                 mov edx,offset write_buffer
  316.                 sub edi,edx
  317.  
  318.                 mov ax,4000h                    ; schreibe konvertierte Daten
  319.                 mov ecx,edi                     ; auf disk....
  320.                 mov edx,offset write_buffer
  321.                 mov ebx,[ds:handel_2]
  322.                 int 21h
  323.  
  324.                 jmp do_converting
  325. end_converting:
  326.  
  327.                 ret
  328.  
  329. convert_last_bytes:
  330.  
  331.                 mov ecx,eax                     ;
  332.                 mov esi,offset load_buffer      
  333.                 mov edi,offset write_buffer
  334. _do_y_line2:
  335.                 mov [byte ds:edi],"d"
  336.                 mov [byte ds:edi+1],"b"
  337.                 mov [byte ds:edi+2],32
  338.  
  339.                 add edi,3
  340.  
  341.                 mov edx,10
  342. _do_x_line2:
  343.                 xor ebx,ebx                     ; byte holen
  344.                 mov bl,[ds:esi]
  345.  
  346.                 inc [dword ds:byte_counter]
  347.  
  348.                 mov eax,ebx                     ; EBX * 3
  349.                 add ebx,ebx
  350.                 add ebx,eax
  351.  
  352.                 mov al,[ds:_db_values+ebx]      ; DB-values holen und 
  353.                 mov [ds:edi],al                 ; schreiben
  354.                 mov al,[ds:_db_values+ebx+1]
  355.                 mov [ds:edi+1],al
  356.                 mov al,[ds:_db_values+ebx+2]
  357.                 mov [ds:edi+2],al
  358.  
  359.                 inc esi                         ; nächstes byte
  360.                 add edi,3                       ; nächstes _db_value
  361.  
  362.                 dec ecx                         ; schon zeile zu ende ???
  363.                 jz end_of_line3
  364.  
  365.                 dec edx
  366.                 jz end_of_line2                 ; ja, dann carriage-return und
  367.                                                 ; linefeed setzen
  368.                 
  369.                 mov al,[ds:_db_komma]           ; ansonsten komma zur trennung
  370.                 mov [ds:edi],al                 ; setzen
  371.                 inc edi
  372.  
  373.                 jmp _do_x_line2
  374.  
  375. end_of_line3:
  376.                 mov ax,0a0dh
  377.                 mov [ds:edi],ax
  378.                 add edi,2
  379.  
  380.                 mov eax,[ds:byte_counter]
  381.                 call _calc_dezi
  382.  
  383.                 jmp real_end
  384.  
  385. end_of_line2:
  386.                 mov ax,0a0dh
  387.                 mov [ds:edi],ax
  388.                 add edi,2
  389.  
  390.                 mov eax,[ds:byte_counter]
  391.                 call _calc_dezi
  392.  
  393.                 jmp _do_y_line2                 
  394. real_end:
  395.                 mov edx,offset write_buffer
  396.                 sub edi,edx
  397.  
  398.                 mov ax,4000h                    ; schreibe konvertierte Daten
  399.                 mov ecx,edi                     ; auf disk....
  400.                 mov edx,offset write_buffer
  401.                 mov ebx,[ds:handel_2]
  402.                 int 21h
  403.  
  404.                 ret
  405.  
  406. ;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  407. ; BERECHNE DEZIMALWERT VON REGISTER - EAX -
  408. ;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  409. ALIGN 4
  410.  
  411. _calc_dezi:
  412.  
  413.         pushad
  414.         xor edi,edi
  415.         
  416.         mov     ESI,4*7         ; 8 dezimalstellen
  417.         mov     ecx,eax
  418.  
  419. dec83:
  420.         mov     eax,ECX
  421.         xor edx,edx
  422.         idiv     [ds:dec_divider+ESI]
  423.         mov    ECX,EDX        ; reuse remainder
  424.  
  425.                 add al,30h      ; use quotient as digit number
  426.                 mov [ds:dec_buffer+edi],al
  427.  
  428.                 inc edi
  429.                 
  430.         sub ESI,4
  431.  
  432.         jge dec83
  433.  
  434.         popad
  435.  
  436.         mov ah,09h
  437.         mov edx,offset _dec_value
  438.         int 21h
  439.  
  440.         RET
  441.  
  442. ;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  443. ;                       ......DATENSEGMENT......
  444. ;▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒
  445.  
  446. dataseg
  447.  
  448.  
  449. PSP             dd 0
  450. Enviroment      dd 0
  451. para_amount     dd 0
  452. para_line       db 128 dup (0)
  453.  
  454. byte_counter    dd 0
  455.  
  456. dec_divider     dd 1,10,100,1000,10000,100000,1000000,10000000
  457.  
  458. _dec_value      db 13
  459. dec_buffer      db 8 dup (32)
  460.                 db "$"
  461. dummy           db 10,"$"
  462.  
  463. start_mess      db 13,10," BIN2DB-Converter v2.4 / Ultrafast Pmode-Converting-Routine"
  464.                 db 13,10," (c) 1996 Escape Studios",10,"$"
  465.  
  466. e1_txt_0        db 13,10," Unknown error during opening file...",10,"$"
  467. e1_txt_1        db 13,10," File not found...",10,"$"
  468. e1_txt_2        db 13,10," Too many open files...",10,"$"
  469. e1_txt_3        db 13,10," Access not allowed...",10,"$"
  470.  
  471. e2_txt_0        db 13,10," Unknown error during writing file...",10,"$"
  472. e2_txt_1        db 13,10," Too many open files...",10,"$"
  473. e2_txt_2        db 13,10," Can't access local drive...",10,"$"
  474.  
  475. e3_txt          db 13,10," USAGE: BIN2DB(.EXE) -Sourcefile -Targetfile -Label",10,"$"
  476.  
  477. conv_mess       db 13,10,"         Bytes converted: $"
  478.  
  479. cursor_height   db 0
  480.  
  481. handel_1        dd 0
  482. handel_2        dd 0
  483.  
  484. file_1          db 13 dup (0)
  485. file_2          db 13 dup (0)
  486.  
  487. file_label      db 20 dup (32)
  488.                 
  489.  
  490. eof_mark        db 0
  491.  
  492. _db_komma       db ","
  493.  
  494. _db_values      db "000","001","002","003","004","005","006","007","008","009"
  495.                 db "010","011","012","013","014","015","016","017","018","019"
  496.                 db "020","021","022","023","024","025","026","027","028","029"
  497.                 db "030","031","032","033","034","035","036","037","038","039"
  498.                 db "040","041","042","043","044","045","046","047","048","049"
  499.                 db "050","051","052","053","054","055","056","057","058","059"
  500.                 db "060","061","062","063","064","065","066","067","068","069"
  501.                 db "070","071","072","073","074","075","076","077","078","079"
  502.                 db "080","081","082","083","084","085","086","087","088","089"
  503.                 db "090","091","092","093","094","095","096","097","098","099"
  504.  
  505.                 db "100","101","102","103","104","105","106","107","108","109"
  506.                 db "110","111","112","113","114","115","116","117","118","119"
  507.                 db "120","121","122","123","124","125","126","127","128","129"
  508.                 db "130","131","132","133","134","135","136","137","138","139"
  509.                 db "140","141","142","143","144","145","146","147","148","149"
  510.                 db "150","151","152","153","154","155","156","157","158","159"
  511.                 db "160","161","162","163","164","165","166","167","168","169"
  512.                 db "170","171","172","173","174","175","176","177","178","179"
  513.                 db "180","181","182","183","184","185","186","187","188","189"
  514.                 db "190","191","192","193","194","195","196","197","198","199"
  515.  
  516.                 db "200","201","202","203","204","205","206","207","208","209"
  517.                 db "210","211","212","213","214","215","216","217","218","219"
  518.                 db "220","221","222","223","224","225","226","227","228","229"
  519.                 db "230","231","232","233","234","235","236","237","238","239"
  520.                 db "240","241","242","243","244","245","246","247","248","249"
  521.                 db "250","251","252","253","254","255"
  522.  
  523. load_buffer     db 64000 dup (?)
  524.  
  525. ;
  526. ; 30 Zahlencodes, 9 Kommas, 1 Carriage-return, 1 Linefeed + 3 bytes für DB_
  527. ;
  528. write_buffer    db 64000*3+6400*9+6400*3+6400*2+1 dup (?)
  529.  
  530. end start
  531.  
  532.